Use liquid in the matches section of EventFormattingAgent

Dominik Sander 11 years ago
parent
commit
e8ecbe25b8

+ 4 - 0
app/concerns/liquid_interpolatable.rb

@@ -14,6 +14,10 @@ module LiquidInterpolatable
14 14
     duped_options
15 15
   end
16 16
 
17
+  def interpolate_string string, payload
18
+    Liquid::Template.parse(string).render(payload)
19
+  end
20
+
17 21
   require 'uri'
18 22
   # Percent encoding for URI conforming to RFC 3986.
19 23
   # Ref: http://tools.ietf.org/html/rfc3986#page-12

+ 2 - 2
app/models/agents/event_formatting_agent.rb

@@ -43,7 +43,7 @@ module Agents
43 43
           {
44 44
             "matchers": [
45 45
               {
46
-                "path": "$.date.pretty",
46
+                "path": "{{date.pretty}}",
47 47
                 "regexp": "\\A(?<time>\\d\\d:\\d\\d [AP]M [A-Z]+)",
48 48
                 "to": "pretty_date",
49 49
               }
@@ -162,7 +162,7 @@ module Agents
162 162
             re = Regexp.new(regexp)
163 163
             proc { |hash|
164 164
               mhash = {}
165
-              value = Utils.value_at(hash, path)
165
+              value = interpolate_string(path, hash)
166 166
               if value.is_a?(String) && (m = re.match(value))
167 167
                 m.to_a.each_with_index { |s, i|
168 168
                   mhash[i.to_s] = s

+ 1 - 1
spec/models/agents/event_formatting_agent_spec.rb

@@ -12,7 +12,7 @@ describe Agents::EventFormattingAgent do
12 12
             :mode => "clean",
13 13
             :matchers => [
14 14
                 {
15
-                    :path => "$.date.pretty",
15
+                    :path => "{{date.pretty}}",
16 16
                     :regexp => "\\A(?<time>\\d\\d:\\d\\d [AP]M [A-Z]+)",
17 17
                     :to => "pretty_date",
18 18
                 },

+ 5 - 0
spec/models/concerns/liquid_interpolatable.rb

@@ -27,5 +27,10 @@ shared_examples_for LiquidInterpolatable do
27 27
           "escape" => "This should be Hello+world"
28 28
       }
29 29
     end
30
+
31
+    it "should work for strings" do
32
+      @checker.send(:interpolate_string, "{{variable}}", @event.payload).should == "hello"
33
+      @checker.send(:interpolate_string, "{{variable}} you", @event.payload).should == "hello you"
34
+    end
30 35
   end
31 36
 end